/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：JailhouseCompositeEditPart.js<br>
 * 日期：2016年9月27日<br>
 * 作者: 王志远<br>
 * 功能：可编辑的组合器件（监狱组合件）<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/

window.makeNamespace(window,"Rainier.UI.V2");

/**
 * 类型名称：Rainier.UI.V2.JailhouseCompositeEditPart<br>
 * 类型功能：可以编辑的组合编辑件<br>
 */
Rainier.UI.V2.JailhouseCompositeEditPart = Rainier.UI.V2.CompositeEditPart.extend({
	
	NAME : "Rainier.UI.V2.JailhouseCompositeEditPart",
	
	/**
	 * 函数名称：Rainier.UI.V2.JailhouseCompositeEditPart.init<br>
	 * 函数功能：构造函数<br>
	 * 异常信息：无<br>
	 */
	init : function(){
		this._super();
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.JailhouseCompositeEditPart.createFigure<br>
	 * 函数功能：创建连接图元<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	createFigure : function(){
		var model 		= this.model;
		var thisFigure 	= new Rainier.UI.V2.Jailhouse(this.model.property.uiProperty);
		this.figure 	= thisFigure;			
		this.fillFigure();
		return thisFigure;
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.JailhouseCompositeEditPart.refreshChildParts<br>
	 * 函数功能：在model层添加了端口或删除了模型，执行这个函数可以同步相应的part和figure的添加或删除<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	refreshChildParts : function(){
		var models 	= this.model.getChildren();
		var parts  	= this.getChildren();
		var comPart = this;
		
		//没有删除也没有添加子模型
		if(models.length === parts.length){
			return;
		}
		
		//添加了模型
		if(models.length > parts.length){
			var isExisted = false;
			for(var i=0; i<models.length; i++){
				var model = models[i];
				for(var j=0; j<parts.length; j++){
					var part = parts[j];
					if(model === part.getModel()){
						isExisted = true;
					}
				}
				
				if(!isExisted){
					if(comPart.partFactory){
						var childPart = comPart.partFactory.createObject(model);
						if(childPart){
							var canvas = null;
							var x	   = model.property.modelProperty.locator.x;
							var y      = model.property.modelProperty.locator.y;
							
							if(comPart.getFigure() instanceof draw2d.Canvas){
								canvas = comPart.getFigure();
							}else{
								canvas = comPart.getFigure().getCanvas();
							}
							childPart.setModel(model);
							childPart.setParent(comPart);
							
							var childFigure = childPart.createFigure();
							canvas.add(childFigure,x,y);
							
							if(comPart.getFigure() instanceof draw2d.shape.composite.Composite){
								comPart.getFigure().assignFigure(childFigure);
							}
							
							comPart.addChild(childPart.getUuid(),childPart);
							childPart.refreshChildren();																
						}
					}
				}
				isExisted = false;
			}
		}
		
		//删除了子模型
		if(models.length < parts.length){
			var delParts = new draw2d.util.ArrayList();
			for(var i=0; i<parts.length; i++){
				var isExisted = false;
				var part = parts[i];
				for(var j=0; j<models.length; j++){
					var model = models[j]; 
					if(model === part.getModel()){
						isExisted = true;
					}
				}
				if(!isExisted){
					delParts.add(part);
				}					
			}
			delParts.each(function(i,part){
				comPart.getFigure().remove(part.getFigure());
				comPart.removeChildById(part.getUuid());
				part.refreshChildren();
			});
			return;
		}
	}
});